package com.kabigon.tiny.service;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class MeetingExcelExport {
    public static void main(String[] args) {
        // 数据
        List<Map<String, Object>> data = getData();

        // 创建工作簿
        Workbook workbook = new XSSFWorkbook();

        // 创建工作表
        Sheet sheet = workbook.createSheet("2023年全体会议");

        // 填充数据
        for (int i = 0; i < data.size(); i++) {
            Row row = sheet.createRow(i);
            Map<String, Object> rowData = data.get(i);
            int cellIndex = 0;
            for (String key : rowData.keySet()) {
                Cell cell = row.createCell(cellIndex++);
                Object value = rowData.get(key);
                if (value instanceof String) {
                    cell.setCellValue((String) value);
                } else if (value instanceof Integer) {
                    cell.setCellValue((Integer) value);
                }
            }
        }

        // 调整列宽
        for (int i = 0; i < data.get(0).keySet().size(); i++) {
            sheet.autoSizeColumn(i);
        }

        // 导出Excel文件
        try (FileOutputStream fileOut = new FileOutputStream("meeting.xlsx")) {
            workbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 关闭工作簿
        try {
            workbook.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Excel文件导出成功！");
    }

    private static List<Map<String, Object>> getData() {
        // 假设数据保存在List<Map<String, Object>>中
        // 注意：这里的数据结构与JSON中的结构一致
        // 你可以根据实际数据结构进行调整
        // 在这个示例中，我们手动创建了一个数据列表
        //List<Map<String, Object>> data = List.of(
        //        Map.of("2023年全体会议", "序号", "__EMPTY", "姓名", "__EMPTY_1", "基本规则"),
        //        Map.of("__EMPTY_1", "文化", "__EMPTY_2", "游戏"),
        //        Map.of("2023年全体会议", 1, "__EMPTY", "小红", "__EMPTY_1", "汉语", "__EMPTY_2", "擅自朗")
        //);
        // 使用HashMap或LinkedHashMap创建示例数据
        List<Map<String, Object>> data = new ArrayList<>();
        // 第一行数据
        Map<String, Object> row1 = new LinkedHashMap<>();
        row1.put("2023年全体会议", "序号");
        row1.put("__EMPTY", "姓名");
        row1.put("__EMPTY_1", "基本规则");
        data.add(row1);

        // 第二行数据
        Map<String, Object> row2 = new LinkedHashMap<>();
        row2.put("__EMPTY_1", "文化");
        row2.put("__EMPTY_2", "游戏");
        data.add(row2);

        // 第三行数据
        Map<String, Object> row3 = new LinkedHashMap<>();
        row3.put("2023年全体会议", 1);
        row3.put("__EMPTY", "小红");
        row3.put("__EMPTY_1", "汉语");
        row3.put("__EMPTY_2", "擅自朗");
        data.add(row3);

        return data;
    }

}
